﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net;
using ServicioRFIDMovil.Entidad;
using ServicioRFIDMovil.DataAccess;
using ServicioRFIDMovil.Herramientas;
using System.Data;

namespace ServicioRFIDMovil.Datos
{
    public class IncidenciaDA
    {

        #region --- Variables y Constantes ---
        private static readonly ILog log = LogManager.GetLogger(typeof(IncidenciaDA));

        // Parametros Entrada
        private const string PARAM_CURSOR = "P_LISTATIPOINCIDENCIA";

        private const string PARAM_IDBIEN = "P_IIDBIEN";
        private const string PARAM_IDINCIDENCIATIPO = "P_IIDINCIDENCIATIPO";
        private const string PARAM_ACCION = "P_VACCION";
        private const string PARAM_OBSERVACION = "P_VOBSERVACION";
        private const string PARAM_USUARIORESPONSABLE = "P_IIDEMPLEADORESPONSABLE";
        private const string PARAM_USUARIOREGISTRA = "P_IIDUSUARIOREGISTRA";
        private const string PARAM_IDMOVIMIENTO = "P_IIDMOVIMIENTO";

        // Parametros Salida
        private const string IIDINCIDENCIATIPO = "IIDINCIDENCIATIPO";
        private const string VNOMBRE = "VNOMBRE";



        #endregion

        #region --- Metodos Propios ---
        public ListaIncidenciaTipo listarIncidenciaTipo()
        {
            ListaIncidenciaTipo listaIncidenciaTipo = null;
            DataSet dsIncidenciaTipo = new DataSet();

            if (log.IsDebugEnabled)
            {
                log.Debug("listarIncidenciaTipo()");
            }

            using (Database db = new Database(ConstantesDAO.NombreInterface.ConexTvperu))
            {
                db.NombreProcedimiento = Constantes.PROCEDIMIENTO_RFID_OBTENERINCIDENCIATIPO;
                db.agregarParametro(PARAM_CURSOR, DbType.Binary, ParameterDirection.Output, null);

                IDataAdapter dataAdapter = db.obtenerDataAdapter();
                dataAdapter.Fill(dsIncidenciaTipo);

                listaIncidenciaTipo = new ListaIncidenciaTipo();

                IncidenciaTipo incidenciaTipo = null;
                foreach (DataRow fila in dsIncidenciaTipo.Tables[0].Rows)
                {
                    // Se obtiene almacen
                    incidenciaTipo = generarEntidad(fila);
                   
                    // Agregar almacen a listado de almacenes activos
                    listaIncidenciaTipo.Add(incidenciaTipo);
                    
                }
            }

            if (log.IsDebugEnabled)
            {
                log.Debug("Retornando " + listaIncidenciaTipo.Count + " registros");
            }

            return listaIncidenciaTipo;
        }

        private IncidenciaTipo generarEntidad(DataRow fila)
        {
            IncidenciaTipo incidenciaTipo = new IncidenciaTipo();
            incidenciaTipo.codigo = Convert.ToInt32(fila[IIDINCIDENCIATIPO]);
            incidenciaTipo.descripcion = fila[VNOMBRE].ToString();
            return incidenciaTipo;
        }

        public bool registrarIncidencia(Incidencia incidencia)
        {
            bool resultado = false;

            if (log.IsDebugEnabled)
            {
                log.Debug("registrarIncidencia()");
            }

            using (Database db = new Database(ConstantesDAO.NombreInterface.ConexTvperu))
            {
                db.NombreProcedimiento = DataBaseHelper.obtenerNombreProcedimiento(Constantes.PROCEDIMIENTO_RFID_REGISTRARINCIDENCIA);
                db.agregarParametro(PARAM_IDINCIDENCIATIPO, DbType.Int32, ParameterDirection.Input, incidencia.codIncidenciaTipo);
                db.agregarParametro(PARAM_IDBIEN, DbType.Int32, ParameterDirection.Input, incidencia.bien.idBien);
                db.agregarParametro(PARAM_OBSERVACION, DbType.String, ParameterDirection.Input, incidencia.observacion);
                db.agregarParametro(PARAM_ACCION, DbType.String, ParameterDirection.Input, incidencia.accion);
                db.agregarParametro(PARAM_IDMOVIMIENTO, DbType.Int32, ParameterDirection.Input, incidencia.codMovimiento);
                db.agregarParametro(PARAM_USUARIORESPONSABLE, DbType.Int32, ParameterDirection.Input, incidencia.usuarioResponsable.idUsuario);
                db.agregarParametro(PARAM_USUARIOREGISTRA, DbType.Int32, ParameterDirection.Input, incidencia.usuario.idUsuario);

                db.ejecutar();

                resultado = true;
            }

            return resultado;
        }
        #endregion


    }
}
